'''
破译路由密码思路：

 定义密文形式
 将密文拆分成单个字母
 定义矩阵列数和行数
 定义秘钥，用于设置密文阅读路径
 设置矩阵列表占位用于储存密文
 设置储存明文的变量
 设置起始位和结束位
 根据秘钥确定阅读路径并保存至矩阵列表
'''

ciphertext = '16 12 8 4 0 1 5 9 13 17 18 14 10 6 2 3 7 11 15 19' #以字符串形式加载密文

cipherList = list(ciphertext.split())

COLS = 4
ROWS = 5

key = '-1 2 -3 4' #复述表示从下往上阅读，正数表示从上向下阅读，密钥长度也是列数

translation_matrix = [None] * COLS

plaintext = ''

start = 0
stop = ROWS

key_init = [int(i) for i in key.split()]

for k in key_init:
    if k < 0:
        col_items = cipherList[start:stop]
    elif k > 0:
        col_items = list(reversed(cipherList[start:stop])) #reversed()函数:将列表内的值倒着返回，用法：list(reversed(seq))
    translation_matrix[abs(k)-1] = col_items
    start += ROWS
    stop += ROWS

print('\n密文为:{}'.format(ciphertext))
print('\n密文矩阵:',*translation_matrix,sep='\n')
print('\n矩阵列数:{}'.format(len(key_init)))

for i in range(ROWS):
    for col_items in translation_matrix:
        word = str(col_items.pop()) #pop()函数：若不指定索引值，默认删除并返回列表中的最后一个元素
        plaintext += word+' '

print('明文显示:{}'.format(plaintext))